{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "4A0vWvLr10Ei"
      },
      "source": [
        "##### Copyright 2019 Google LLC.\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "I7wgP0Ec1_Q5"
      },
      "outputs": [],
      "source": [
        "#@title Licensed under the Apache License, Version 2.0 (the \"License\"); { display-mode: \"form\" }\n",
        "# you may not use this file except in compliance with the License.\n",
        "# You may obtain a copy of the License at\n",
        "#\n",
        "# https://www.apache.org/licenses/LICENSE-2.0\n",
        "#\n",
        "# Unless required by applicable law or agreed to in writing, software\n",
        "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "# See the License for the specific language governing permissions and\n",
        "# limitations under the License."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "VZ_HMUrW2F72"
      },
      "source": [
        "# Black Scholes: Price and Implied Vol in TFF\n",
        "\n",
        "\u003ctable class=\"tfo-notebook-buttons\" align=\"left\"\u003e\n",
        "  \u003ctd\u003e\n",
        "    \u003ca target=\"_blank\" href=\"https://www.google.com/url?q=https://github.com/google/tf-quant-finance/blob/master/tf_quant_finance/examples/jupyter_notebooks/Black_Scholes_Price_and_Implied_Vol.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" /\u003eRun in Google Colab\u003c/a\u003e\n",
        "  \u003c/td\u003e\n",
        "  \u003ctd\u003e\n",
        "    \u003ca target=\"_blank\" href=\"https://github.com/google/tf-quant-finance/blob/master/tf_quant_finance/examples/jupyter_notebooks/Black_Scholes_Price_and_Implied_Vol.ipynb\"\u003e\u003cimg src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" /\u003eView source on GitHub\u003c/a\u003e\n",
        "  \u003c/td\u003e\n",
        "\u003c/table\u003e"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "cellView": "form",
        "colab": {},
        "colab_type": "code",
        "id": "uG8UAZXjeUhf"
      },
      "outputs": [],
      "source": [
        "#@title Upgrade to TensorFlow 2.1+\n",
        "!pip install --upgrade tensorflow"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "cellView": "form",
        "colab": {},
        "colab_type": "code",
        "id": "Btl9FLH02Lul"
      },
      "outputs": [],
      "source": [
        "#@title Install TF Quant Finance\n",
        "!pip install tf-quant-finance"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "cellView": "form",
        "colab": {},
        "colab_type": "code",
        "id": "pf3l6s8g9zBb"
      },
      "outputs": [],
      "source": [
        "#@title Imports\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "\n",
        "import tensorflow as tf\n",
        "tf.compat.v1.enable_eager_execution()\n",
        "import tf_quant_finance as tff \n",
        "\n",
        "option_price = tff.black_scholes.option_price\n",
        "implied_vol = tff.black_scholes.implied_vol\n",
        "\n",
        "from IPython.core.pylabtools import figsize\n",
        "figsize(21, 14) # better graph size for Colab  "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "VHJ_OL8EhKZx"
      },
      "source": [
        "# Black Scholes pricing and implied volatility usage\n",
        "\n",
        "Here we see how to price vanilla options in the Black Scholes framework using the library. \n",
        "\n",
        "## Semantics of the interface\n",
        "\n",
        "If $S$ is the spot price of an asset, $r$ the risk free rate, $T$ the time to expiry, $\\sigma$ the volatility. The price of a call $C$ under [Black Scholes](https://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model#Black%E2%80%93Scholes_formula) model exhibits the following relationship (suppressing unusued notation):\n",
        "\n",
        "$C(S, r) = e^{-rT} C(e^{rT}S, 0)$\n",
        "\n",
        "Where $e^{-rT}$ is the discount factor, and $e^{rT}S_t$ the forward price of the asset to expiry. The `tff`'s interface is framed in terms of forward prices and discount factors (rather than spot prices and risk free rates). This corresponds to the right hand side of the above relationship.\n",
        "\n",
        "## Parallelism\n",
        "\n",
        "Note that the library allows pricing of options in parallel: each argument (such as the `strikes`) is an array and each index corresponds to an independent option to price. For example, this allows the simultaneous pricing of the same option with different expiry dates, or strike prices or both.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "height": 34
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 265,
          "status": "ok",
          "timestamp": 1568121773001,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "rbVLsywSWGoL",
        "outputId": "0858f20d-3a5f-4d41-f303-d07841c30b0f"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "\u003ctf.Tensor: id=22630, shape=(4,), dtype=float64, numpy=array([0.14798729, 0.24216815, 0.74814549, 0.02260333])\u003e"
            ]
          },
          "execution_count": 23,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Calculate discount factors (e^-rT)\n",
        "rate = 0.05\n",
        "expiries = np.array([0.5, 1.0, 2.0, 1.3])\n",
        "discount_factors = np.exp(-rate * expiries)\n",
        "# Current value of assets.\n",
        "spots = np.array([0.9, 1.0, 1.1, 0.9])\n",
        "# Forward value of assets at expiry.\n",
        "forwards = spots / discount_factors\n",
        "# Strike prices given by:\n",
        "strikes = np.array([1.0, 2.0, 1.0, 0.5])\n",
        "# Indicate whether options are call (True) or put (False)\n",
        "is_call_options = np.array([True, True, False, False])\n",
        "# The volatilites at which the options are to be priced.\n",
        "volatilities = np.array([0.7, 1.1, 2.0, 0.5])\n",
        "# Calculate the prices given the volatilities and term structure.\n",
        "prices = option_price(\n",
        "      volatilities=volatilities,\n",
        "      strikes=strikes,\n",
        "      expiries=expiries,\n",
        "      forwards=forwards,\n",
        "      discount_factors=discount_factors,\n",
        "      is_call_options=is_call_options)\n",
        "prices"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "yoUBFQaNst-D"
      },
      "source": [
        "We now show how to invert the Black Scholes pricing model in order to recover the volatility which generated a given market price under a particular term structure. Again, the implied volatility interface operates on batches of options, with each index of the arrays corresponding to an independent problem to solve. "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "height": 34
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 233,
          "status": "ok",
          "timestamp": 1568121774787,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "QrxQV8BgXqIS",
        "outputId": "916621b2-b53b-4447-93a5-f7bf6183a786"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "\u003ctf.Tensor: id=24393, shape=(4,), dtype=float64, numpy=array([0.7, 1.1, 2. , 0.5])\u003e"
            ]
          },
          "execution_count": 24,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Initial positions for finding implied vol.\n",
        "initial_volatilities = np.array([2.0, 0.5, 2.0, 0.5])\n",
        "# Identifier whether the option is call (True) or put (False)\n",
        "is_call_options = np.array([True, True, False, False])\n",
        "# Find the implied vols beginning at initial_volatilities.\n",
        "implied_vols = implied_vol(\n",
        "    prices=prices,\n",
        "    strikes=strikes,\n",
        "    expiries=expiries,\n",
        "    forwards=forwards,\n",
        "    discount_factors=discount_factors,\n",
        "    is_call_options=is_call_options,\n",
        "    initial_volatilities=initial_volatilities,\n",
        "    validate_args=True,\n",
        "    tolerance=1e-9,\n",
        "    max_iterations=200,\n",
        "    name=None,\n",
        "    dtype=None)\n",
        "implied_vols"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "JH1b0hV_V-v7"
      },
      "source": [
        "Which should show that `implied_vols` is very close to the `volatilities` used to generate the market prices. Here we provided initial starting positions, however, by default `tff` will chose an adaptive initialisation position as discussed below."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "snuGZWMvhS-4"
      },
      "source": [
        "# Black Scholes implied volatility convergence region\n",
        "\n",
        "We now look at some charts which provide a basic illustration of the convergence region of the implemented root finding method.\n",
        "\n",
        "The library provides an implied volatility root finding method. If not provided\n",
        "with an initial starting point, a starting point will be found using the Radiocic-Polya approximation [1] to the implied volatility. This section illustrates both call styles and the comparitive advantage of using targeted initialisation.\n",
        "\n",
        "In this example:\n",
        "\n",
        "* Forward prices are fixed at 1.\n",
        "* Strike prices are from uniform grid on (0, 5).\n",
        "* Expiries are fixed at 1.\n",
        "* Volatilities are from a uniform grid on (0, 5).\n",
        "* Fixed initial volatilities (where used) are 1.\n",
        "* Option prices were computed by tff.black_scholes.option_price on the other data.\n",
        "* Discount factors are 1.\n",
        "\n",
        "\n",
        "[1] Dan Stefanica and Rados Radoicic. [*An explicit implied volatility formula.*](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2908494) International Journal of Theoretical and Applied Finance. Vol. 20, no. 7, 2017.\n",
        "    "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "cellView": "form",
        "colab": {},
        "colab_type": "code",
        "id": "HCbHFn-mha1O"
      },
      "outputs": [],
      "source": [
        "#@title Example data on a grid.\n",
        "def grid_data(strike_vec, vol_vec, dtype=np.float64):\n",
        "  \"\"\"Construct dummy data with known ground truth.\n",
        "  \n",
        "  For a grid of known strikes by volatilities, return the price.\n",
        "  Assumes the forward prices and expiries are fixed at unity.\n",
        "  \n",
        "  Args:\n",
        "    strikes: a vector of strike prices from which to form the grid.\n",
        "    volatilities: a vector of volatilities from which to form the grid.\n",
        "    dtype: a numpy datatype for the element values of returned arrays.\n",
        "  \n",
        "  Returns:\n",
        "    (forwards, strikes, expiries, true_volatilities, prices) all of\n",
        "    which are identically shaped numpy arrays.\n",
        "  \"\"\"\n",
        "  nstrikes = len(strike_vec)\n",
        "  nvolatilities = len(vol_vec)\n",
        "  vol_ones = np.matrix(np.ones((1, nvolatilities)))\n",
        "  strike_ones = np.matrix(np.ones((nstrikes, 1)))\n",
        "  strikes = np.array(np.matrix(strike_vec).T * vol_ones, dtype=dtype)\n",
        "  volatilities = np.array(strike_ones * np.matrix(vol_vec), dtype=dtype)\n",
        "  expiries = np.ones_like(strikes, dtype=dtype)\n",
        "  forwards = np.ones_like(strikes, dtype=dtype)\n",
        "  initials = np.ones_like(strikes, dtype=dtype)\n",
        "  prices = option_price(volatilities=volatilities,\n",
        "                        strikes=strikes,\n",
        "                        expiries=expiries,\n",
        "                        forwards=forwards,\n",
        "                        dtype=tf.float64)\n",
        "  return (forwards, strikes, expiries, volatilities, initials, prices)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "tmjDwTUAg5Ov"
      },
      "outputs": [],
      "source": [
        "# Build a 1000 x 1000 grid of options find the implied volatilities of.\n",
        "nstrikes = 1000\n",
        "nvolatilities = 1000\n",
        "strike_vec = np.linspace(0.0001, 5.0, nstrikes)\n",
        "vol_vec = np.linspace(0.0001, 5.0, nvolatilities)\n",
        "max_iterations = 50\n",
        "grid = grid_data(strike_vec, vol_vec)\n",
        "forwards0, strikes0, expiries0, volatilities0, initials0, prices0 = grid\n",
        "initials0 = discounts0 = signs0 = np.ones_like(prices0)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "WtwioKKUAHZm"
      },
      "outputs": [],
      "source": [
        "# Implied volitilities, starting the root finder at 1.\n",
        "implied_vols_fix = implied_vol(\n",
        "    prices=prices0,\n",
        "    strikes=strikes0,\n",
        "    expiries=expiries0,\n",
        "    forwards=forwards0,\n",
        "    initial_volatilities=initials0,\n",
        "    validate_args=False,\n",
        "    tolerance=1e-8,\n",
        "    max_iterations=max_iterations)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "qgzM3DCxCHaJ"
      },
      "outputs": [],
      "source": [
        "# Implied vols starting the root finder at the Radiocic-Polya approximation.\n",
        "implied_vols_polya = implied_vol(\n",
        "    prices=prices0,\n",
        "    strikes=strikes0,\n",
        "    expiries=expiries0,\n",
        "    forwards=forwards0,\n",
        "    validate_args=False,\n",
        "    tolerance=1e-8,\n",
        "    max_iterations=max_iterations)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "cellView": "form",
        "colab": {
          "height": 624
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 2333,
          "status": "ok",
          "timestamp": 1568121679589,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "ZDb05xZFDF9x",
        "outputId": "72f841e4-e844-4b87-9b8f-cb472fd7b6e6"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x2e21eb7ec6d0\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        },
        {
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABQIAAAJOCAYAAADs5HpYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8k+X9//H3nbaU05AWBFoQUdQh8lWp5XxQOUihhQIK\nmxuuTrCCnPZVdB44ozhw6ldXUUA2VHTzMJWDgJzkKMIQBYf6G6I4pKUgBQoUhTb5/VGbNG2Spu2d\n5E76ej4ehTT3nTv3lftO88nn+lzXbTgcDocAAAAAAAAARDRbqHcAAAAAAAAAQOCRCAQAAAAAAABq\nABKBAAAAAAAAQA1AIhAAAAAAAACoAUgEAgAAAAAAADUAiUAAAAAAAACgBiARiBotJydHSUlJcjgc\npm+7TZs2OnTokMdld999t9577z2/tlPRutOmTdMLL7zg17buuOMOvf3225Kk5cuXa+TIkX49rjIC\ntd1du3apf//+pm9XkrKysvTAAw9Iqt45cfjwYbVp00Z2uz1g+1dd8+fP15QpU0zZViR6+OGH9eyz\nz4Z6NwAAJujVq5e2b98uyZzPv0DFOL6Ujt3MlJaWpn/961+mrFuZuNbsY1JWRbFYZdpdneetzGtS\nViCOuZkxaiC/P0WCnTt36sYbbwz1bgA+RYd6B4Bg6NWrl44fP66oqCg5HA4ZhqEPPvhACQkJ2r17\nd0Ce0zAMr8sWLlzo93ZKr/vuu+/qrbfe0uuvv+68b8aMGVXav4EDB2rgwIFVemyJw4cPq3fv3vri\niy9ks9lM264nycnJWrVqlenbLVFyvKp7Tvg67tVh1nbvueceU7ZTGQ8//LCaNWumiRMnBv25AQDh\no3S8VrduXfXo0UNTp05VnTp1qr1tMz7/qhrjlMRLdevWlSTFxcXpV7/6lTIzM6u9T1W1YsWKKq2b\nlZWl//73v5o7d67zvsrEtaUFKibxFTNVpt3Ved6qviaBZFYsGcjvT97s3LlTDzzwgDZt2hTU562q\nQH0fAMxCIhA1xvz589W5c+egPV8geslKkphWUbI/9AiiOoqKihQVFRXq3QAAWEBJvHb8+HHddddd\nmj9/vv7whz+EereqzTAMffLJJzIMQ5999pnuvPNOtW3bVt27dw/1rgGW5893IOJJwH8MDUaN4SlZ\nVbpM/tSpU7rxxhu1ceNGSVJBQYFuueUWLV26VJJ0/vx5zZkzRzfffLO6d++u6dOn6/z5885tvfTS\nS+revbt69uypf/7znz4/rEqX/L/77rv6zW9+ozlz5qhjx47q06ePNm/eXG7dAwcOaPr06frss8/U\nvn17dezYUZL7UMb8/HyNHj1aXbp0UadOnTR69Gjl5uZ63IeS5y0xe/Zsde3aVcnJyUpPT9fXX38t\nSdq0aZOGDBmiG264QTfffLOysrLc9k0qrtZLSkrSnj17ym139+7duu2229ShQwcNGzZMn376qdvj\nn332Wd1+++1KSkrSyJEjdfLkSY/7W7bMvlevXlq0aJEGDRqk9u3ba/LkyTp+/LjuvvtuJSUl6a67\n7tLp06cluY7zm2++qR49eqhHjx7629/+5vF5yg6dOHPmjB599FF1795dN954o/7v//7PeS7Z7XbN\nmTNHnTt3Vt++fZ3njicLFizQhAkT3O577LHH9Pjjj0uSjh49qjFjxqhTp07q16+f3nrrLa/b8vS6\nvPTSS+ratat69OihdevWadOmTerXr586deqk+fPnO9cvPcy4pK3vvfeebr75ZnXp0kUvvviic92y\nw2TLHoMFCxaoZ8+eSkpKUv/+/fXxxx+X278333xTy5cv10svvaSkpCSNGTNGUvHxW7hwofP4FRUV\nlRtOX/b5P/zwQw0ePFgdOnTQ7bffrv/3//6fx9dk2rRpmjNnjtt99957rxYvXixJOnDggO644w51\n6NBBAwcO1IYNGyp8nQEAwVHyGduoUSN1795dX331lXOZr5hEkt577z316tVLnTt3dvs8k8pPs7F+\n/XqlpaWpY8eO+t3vfqcDBw44lx05ckTjx49Xly5d1LlzZz322GOSysdO+/fv11133aVOnTqpe/fu\nWrBggV9tu/7663XFFVdo//79knzHSiXOnz+vTp06OR8jSXl5ebruuut04sSJSsWAkvsQ3aysLP3h\nD3/QH//4RyUlJWngwIHat29fuXW3bNmiF198UStXrlT79u01ePBgSe5x7aFDh5SRkaFOnTqpS5cu\nmjRpks6cOeNxH0ofk/Pnz+uBBx5Qp06dnK9DXl6eJPNiMU/tnjhxoh544AElJSVp0KBBOnjwoBYs\nWKCuXbvq5ptv1rZt25yPveOOO/T0009r2LBhSk5O1tixY5Wfn+/xecoO73377bc1YMAAderUSaNG\njVJ2drZz2bZt29S/f3916NBBs2bN8rrvR48e1XXXXef2nF988YU6d+6soqIiORwOzZs3T7169VK3\nbt300EMPeX3tPb0ulY2rS2JlX/G8p2GypY/B3r17deutt+qGG25Q9+7dy8VvknTu3DllZmbq6NGj\nat++vZKSknTs2DFlZWVpwoQJeuCBB5ScnKx33323wtj16NGjmjBhgrp06aI+ffro1Vdf9fh67Nmz\nR927d3f7/rh27VoNGjRIUvH5+vjjj6tHjx7q2bOnZs+erQsXLvj1WgNWQCIQNV5Jwu6iiy7S7Nmz\nNXnyZOXl5Wn27Nlq27at0tPTJUlPPvmkvvvuOy1btkxr1qxRbm6unn/+eUnS5s2btXjxYr388sta\ns2aNPvroo0rtw969e9W6dWvt2LFDI0eO1KOPPlpundatW2vGjBm6/vrr9emnn2rnzp3l1rHb7br1\n1lu1adMmffjhh6pdu7ZmzpxZYdu3bt2qTz75RGvWrNGuXbv0zDPPqGHDhpKkunXrau7cufrkk080\nf/58/eMf/9D69eslSUuWLJFUHMDu3r1b1113ndt2T506pdGjRysjI0M7duzQnXfeqXvuuUenTp1y\n7sP777+vOXPm6OOPP9b58+f117/+tcL9LbF27VotXrxYH3zwgTZs2KC7775b999/v3bs2KGioiK9\n8sorbuvv2LFD69at06JFi7RgwQJnEOLreR588EHFxMRo/fr1evfdd/XRRx85k3RvvPGGNm3apKVL\nl+qf//ynPvjgA6/7npaWpi1btujs2bOSio/V6tWrnUOM7rvvPiUmJmrr1q169tln9fTTT3tMrHny\nww8/6MKFC9qyZYsmTJigKVOmaPny5Xrvvff02muv6fnnn9f333/v9XXcvXu3PvjgA/3tb3/T888/\nr2+++cbrc5U89ttvv9Xrr7+ud955R7t379aiRYvUvHnzcusPHz5cAwcO1KhRo7R79263+SxXrlyp\nhQsXateuXYqKivKZPN+3b58effRRzZo1Szt37tSvfvUrjRkzxmPQNXDgQK1evdr5e35+vrZt26a0\ntDQVFhZqzJgx6tGjh7Zv365HH31UkyZN0sGDB70+NwAg+I4cOaLNmzfr0ksvdd7nKyb5+uuvNWPG\nDD355JPasmWLTp48qaNHj7pts/Rn2KRJk/Too49q+/bt6tmzp8aMGaPCwkLZ7Xbdc889atGihTZu\n3KjNmzdrwIAB5bZx9uxZ/f73v1fPnj21ZcsWrVmzpsKRJyVJhU8++UQHDhxQ27Zt/YqVJKlWrVpK\nTU3VsmXLnPetWLFCXbt2VVxcnMcY0FdSqawPP/xQaWlp+uSTT3TzzTd7jB979Oih0aNHa8CAAfr0\n0089zoHncDg0evRobdu2TStXrlRubq7+8pe/eH3ektfz3Xff1ZkzZ7Rlyxbt3LlTM2bMUGxsrCTz\nYjFPNm7cqCFDhmjXrl26+uqrNXLkSDkcDm3ZskX33nuvpk6d6rb+0qVL9ac//Ulbt25VVFSUX6/x\nunXrtHDhQj3//PPavn27kpOTdd9990kqTuZOmDBB9913nz7++GNdcsklXofdNmnSRO3bt3dr44oV\nK5SSkqKoqCj985//1NKlS/Xqq69q3bp1Onv2rM/vAWVVJq4uG7P5iud9xXezZ89WRkaGPvnkE61d\nu9bjfOB16tTRwoUL1aRJE3366afavXu3Lr74YknShg0b1L9/f+3atcvrsP2S5y85N6+++mpt3bpV\nixcv1iuvvOKW7C1x3XXXqW7dum6x+IoVK5yJwBdeeEGff/65li1bpqVLl2rv3r1+z9kOWAGJQNQY\nY8eOVceOHdWxY0eNGzfO4zrdunVTSkqKMjIytHnzZrf5995++209/PDD+sUvfqG6desqMzPTOc/I\n6tWrNXToULVu3Vq1a9fW+PHjK7VvzZs312233SbDMDRkyBAdO3ZMx48fr3QbGzZsqL59+6pWrVqq\nW7eu7rnnHu3atavCx0VHR+vs2bM6cOCAHA6HLr/8cjVu3FiS1KFDB1155ZWSpKuuukoDBgwoN8my\nt6HBGzduVKtWrTRw4EDZbDalpqbq8ssv14cffuhcZ+jQoWrZsqVq1aql/v3768svv/S7vSNGjFB8\nfLyaNGmi5ORkXXfddWrTpo1iYmLUt2/fctsaP368YmNjddVVV2no0KF6//33fW7/hx9+0JYtW/TI\nI48oNjZW8fHxysjIcD5u9erVysjIUNOmTdWgQQOfc90kJiaqbdu2WrdunSRp+/btqlu3rq699lrl\n5OTo008/1aRJkxQTE6M2bdpo2LBhzmrUisTExGj06NGKiorSgAEDdOLECWVkZKhOnTq64oordMUV\nV3itnjMMQ+PGjVOtWrXUpk0btWnTxq36wpuoqChduHBB+/fvV2FhoRITE3XJJZf4tb8lfve736lp\n06aqVauWJN/D6d966y39+te/1v/8z//IMAwNHjxYtWrV0p49e8qtm5ycLMMwnOf+Bx98oPbt26tx\n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\neyojI0MZGRnq16+funTpUuX9Kbu89O3OnTvryiuvVPfu3T0+R0ZGhs6dO6dOnTrp17/+dbmrdHl7\n3jNnzmjy5Mnq2LGjevfurbi4ON11112Siq/A+txzz+mGG27QvHnz3CbMrl27tkaPHq3bb79dHTt2\nLBcAN2zYUC+++KIWLVqkzp07a9GiRZo/f75zyHV1eqjLPtafbXXs2FF9+/bV73//e40aNcrrcSq9\nrTlz5ujChQtKTU1Vx44dNXHiRGfv4vDhw9W9e3cNGjRIt956q2655ZYK9yEtLU3bt28vN6HxU089\npe+//149evTQhAkTNHHixArPI28q89r4Wjc9PV2//OUv1atXL40aNcrt2J8/f15PPfWUunTpoh49\neigvL8858XVZt912m77++mu3+Tk97dMjjzyiDRs2qEOHDnr//ffVp08f57J27dpp1qxZmjlzpjp2\n7Kh+/frp3Xff9fEqFAfEZV/rmJgYvfDCC9q8ebM6d+6sWbNmae7cuWrVqpXPbQEAAq/sZ0N8fLwG\nDx7srOqeOnWq15jkiiuu0NSpU3X//ferR48eatiwoZo2berxeS677DI9+eSTmjVrlrp06aKNGzfq\nxRdfVHR0tGw2m1588UV99913uummm3TjjTdq1apV5bZRr149/e1vf9OGDRvUvXt39evXTzt27PC7\nbSUqGys1bdpUbdu2lWEYSk5Odt5fUQzo7/54Wl76dkpKihwOhzp16qShQ4eWWz5u3Dj9+9//VnJy\nskaPHq1+/fr59bw//PCDJkyYoBtuuEFpaWnq1KmTs0PUzFissrFn2fXT09P10EMPqUePHrpw4YLb\nBf68vWZ9+vTR3Xffrf/93/9VcnKyBg0apC1btkiS4uLi9Oyzz+rJJ59U586ddejQIbVv397nPvXu\n3VsHDx5U48aN9ctf/tJ5/2233ab09HSNGDFCffv2VZ06dTR58mS/2l7ZuNpbW8uqX7++pk2bpkcf\nfVQ33nij6tWr5/a+3LJli9LS0pSUlKQnnnhCzzzzjLPKtbTLL79cqamp6t27tzp27FhulEoJX7Fr\nyXv7q6++Uu/evdW1a1dNmTLFZ3IxNTVV//rXv9S5c2e3Ie733nuv2rVrp0GDBik9PV3t2rXT6NGj\nvW4HsBrDYWbXAABY0OHDh9WnTx/t27ev0nPdAAAAWMkjjzyipk2b+rwgCsx3xx13KD09Xbfddluo\n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\nFi1aJEmaMmWKpk+frqeffnrI/U499VRNmDBBkjRmzBideOKJmRypWWKV+wEAABgi6vyvYYXAsWPH\n6tOf/nTm89NOO007d+4ccr+enh4tXLhQkjR+/HjNnDlTTzzxxLC3zZgxQ21tbZKkqVOnSpL27NlT\n/xPndGAr+KvB/gZhR64cuc1+SgCAJgrmxETxR5J27typ//3f/83709/fX/Xz7O3tVVdXV+bzzs7O\novlTrj/+8Y966aWXdOaZZ1b99cIU29wPAABYJy65nxR9/teUdjbP8/Twww9r5syZQ24rF3Cl34xH\nH31Uxx13nCZOnFj06/f39w95QdLptDo7O6VUSnJzikTMCoylwr6/7GlxHifHAQAit3jxYu3YsSPv\nuquuukrLli3Lu+78888fkst4nifHcbRly5aqv+4777yjK6+8UjfccENmhdgERud+tcRT099Co7nk\nfACABqk095Oan/81pZJ18803a/To0Vq8eHHoj/3cc8/pnnvu0U9+8pOS91mzZo1Wr16dd113d7c2\nb94sNXn1PFQpS+ah1BBHYcqXKnlLY9nykkjEYipiMY8tcUh2xNLW5qc+Uc+JefDBBzVQMDSmvb19\nyP0feeSRso/X3d2t3t7ezFy9nTt3llzp7evr0yWXXKLLL79cs2fPruHZR8fk3K+jY0zVXzNbXjKs\nyGTDL2kghFhM+G7wkpiJWMxELOaxIY7UYBCm5H5S8/O/hhcCb7vtNr311lu6//77i97e1dWl3t5e\nTZ8+XZIfcHd397C3SdILL7ygb37zm7rvvvs0ZcqUks/hoosu0vz58/OuSwdbgH/7W/+VbGmRjjrK\n/xj8yf0897KJCjsb4yqEOLJDonPX7xufuNvykkjEYipiMY8tcUj2xHL48JFMMTBKtXaaFZo9e7bW\nrl2rm2++Wdu2bdPLL7+sO+64Y8j99uzZo0suuUQXXHCBvvzlL4fytcNieu7X1/eBOsaNqiomIycO\n2/JLKoUSi5t5hZr3SvGSmIlYzEQs5rEljoEBVyNGRF/RDCv3k6LP/xpa373zzjv1yiuv6N5771VL\niQLanDlztG7dOnmep927d2vTpk2aNWvWsLe99NJLuuaaa3TXXXdl5sSU0t7ersmTJ+f9GfZFM7Xg\nh2EVnhTHCX8AgKjnxITl0ksv1d69ezVr1iwtXbpUK1eu1KhRftHq7rvv1tq1ayVJ//iP/6g333xT\n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\n/2P79u3TrFmzJElbtmzRyZMntXfvXu3atUvHjh3TCy+8kIIIAQAAYCH3A4DeoRAIIKuNGzdOkydP\nliQVFxfHbHv8+HE1NzerqqpKLpdLo0aN0rx587R///6I7e+++27t3btXktTU1KSamhrdfffdkqS9\ne/fqkUce0aBBgzRkyBAtXbpUu3fvTmJkAAAACEXuBwC9wz0CAWS10tLSuNu63W7V1tbq+9//viTf\nlBOv16vx48dHbF9eXq4lS5Zo1apVOnjwoL7zne9o+PDhkqS6urqg1x45cqQuXrzYi0gAAADQHXI/\nAOgdCoEAckrfvn3V0tLi36+rq/NvjxgxQqNHj9a+ffviOtc3vvENDRs2TH/961+1b9++oJXqhg8f\nrtraWo0ePVqSVFtbq5KSkuQEAQAAgLiQ+wFAzzA1GEBO+eY3v6k///nPampqUl1dnX73u9/5j916\n660qLCzUyy+/rLa2Nnk8Hv373//WyZMno56vvLxcr7zyik6cOKEZM2b4H585c6aef/55NTY2qqGh\nQb/+9a/995ABAABAepD7AUDPUAgEkBWsmz53Z+7cufryl7+sKVOmqKqqSjNnzvQfc7lc2rZtm/7x\nj3+orKxMEyZM0KpVq9Tc3Bz1fDNnztR7772niRMn6tprr/U/vmzZMo0ZM0b33HOPKioqNHbsWFVV\nVSUeIAAAAPzI/QAgNRwmdE12AAAAAAAAADmHEYEAAAAAAABAHqAQCAAAAAAAAOQBCoEAAAAAAABA\nHqAQCAAAAAAAAOQBCoEAAAAAAABAHqAQCAAAAAAAAOQBCoEAAAAAAABAHqAQCAAAAAAAAOSB/wd4\nu8SvU1AqwAAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x2e21eb7ec990\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "#@title Visualisation of accuracy\n",
        "plt.clf()\n",
        "\n",
        "thinner = 100\n",
        "fig, _axs = plt.subplots(nrows=1, ncols=2)\n",
        "fig.subplots_adjust(hspace=0.3)\n",
        "axs = _axs.flatten()\n",
        "\n",
        "implied_vols = [implied_vols_fix, implied_vols_polya]\n",
        "titles = [\"Fixed initialisation implied vol minus true vol\", \"Radiocic-Polya initialised implied vol minus true vol\"]\n",
        "vmin = np.min(map(np.min, implied_vols))\n",
        "vmax = np.max(map(np.max, implied_vols))\n",
        "images = []\n",
        "\n",
        "for i in range(2):\n",
        "  _title = axs[i].set_title(titles[i])\n",
        "  _title.set_position([.5, 1.03])\n",
        "  im = axs[i].imshow(implied_vols[i] - volatilities0, origin=\"lower\", interpolation=\"none\", cmap=\"seismic\", vmin=-1.0, vmax=1.0)\n",
        "  images.append(im)\n",
        "  axs[i].set_xticks(np.arange(0, len(vol_vec), thinner))\n",
        "  axs[i].set_yticks(np.arange(0, len(strike_vec), thinner))\n",
        "  axs[i].set_xticklabels(np.round(vol_vec[0:len(vol_vec):thinner], 3))\n",
        "  axs[i].set_yticklabels(np.round(strike_vec[0:len(strike_vec):thinner], 3))\n",
        "  plt.colorbar(im, ax=axs[i], fraction=0.046, pad=0.00)\n",
        "  axs[i].set_ylabel('Strike')\n",
        "  axs[i].set_xlabel('True vol')\n",
        "\n",
        "plt.show()\n",
        "pass"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "riQUYitRzcND"
      },
      "source": [
        "Where the grey values represent `nan`s in the grid. Note that the bottom left corner of each image lies outside the bounds where inversion should be possible. The pattern of `nan` values for different values of a fixed initialisation strategy will be different (rerun the colab to see)."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "QjWPYQDeXuPP"
      },
      "source": [
        "# Black Scholes implied volatility initialisation strategy accuracy comparison\n",
        "\n",
        "We can also consider the median absolute error for fixed versus Radiocic-Polya initialisation of the root finder. We consider a clipped grid looking at performance away from the boundaries where extreme values or nans might occur."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {},
        "colab_type": "code",
        "id": "rYN3kRIBUYnG"
      },
      "outputs": [],
      "source": [
        "# Indices for selecting the middle of the grid.\n",
        "vol_slice = np.arange(int(0.25*len(vol_vec)), int(0.75*len(vol_vec)))\n",
        "strike_slice = np.arange(int(0.25*len(strike_vec)), int(0.75*len(strike_vec)))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "height": 34
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 155,
          "status": "ok",
          "timestamp": 1568121682225,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "PUndrAsGWtJP",
        "outputId": "7a940e11-85b9-4b81-f5ec-bd3de5d696a2"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "5.660064306134416e-09"
            ]
          },
          "execution_count": 20,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "error_fix = implied_vols_fix.numpy() - volatilities0\n",
        "error_fix_sub = [error_fix[i, j] for i, j in zip(strike_slice, vol_slice)]\n",
        "# Calculate the median absolute error in the central portion of the the grid\n",
        "# for the fixed initialisation.\n",
        "median_error_fix = np.median( np.abs(error_fix_sub) )\n",
        "median_error_fix"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "height": 34
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 37,
          "status": "ok",
          "timestamp": 1568121682711,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "bsOVztzKW9zu",
        "outputId": "1967b67d-8309-45b5-fdd6-51db124ab56e"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "3.181876984115206e-11"
            ]
          },
          "execution_count": 21,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "error_polya = implied_vols_polya.numpy() - volatilities0\n",
        "error_polya_sub = [error_polya[i, j] for i, j in zip(strike_slice, vol_slice)]\n",
        "# Calculate the median absolute error in the central portion of the the grid\n",
        "# for the Radiocic-Polya approximation.\n",
        "median_error_polya = np.median( np.abs(error_polya_sub) )\n",
        "median_error_polya"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "height": 34
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 225,
          "status": "ok",
          "timestamp": 1568121683597,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": -60
        },
        "id": "dHlG7GrMX_iQ",
        "outputId": "053d7ee1-c90f-4c15-fead-81c4aa1dc739"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "177.88444790263713"
            ]
          },
          "execution_count": 22,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "median_error_fix / median_error_polya"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "iVrJXz-EYgRc"
      },
      "source": [
        "So we see that both sets of implied volatilities have median absolute errors under the 1e-8 tolerance that we prescribed. However, adaptive initialisation of the root finder has improved the median accuracy of the final results by around two orders of magnitude."
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "last_runtime": {
        "build_target": "",
        "kind": "local"
      },
      "name": "Black_Scholes_Price_and_Implied_Vol.ipynb",
      "provenance": [
        {
          "file_id": "1FrUFfehvzlVHKVuKwTqhxEXyFOL1A_DI",
          "timestamp": 1561016497834
        },
        {
          "file_id": "1tUYCGayyOH52L8cwioLuQZmC7vmW2RsR",
          "timestamp": 1560943932479
        }
      ]
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
